package repositorio;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import modelo.Aluno;
import repositorio.IRepositorioAluno;
import util.GerenteConexao;

public class RepositorioAluno implements IRepositorioAluno{
	
	private GerenteConexao conn = null;
	
	public RepositorioAluno(){
		conn = GerenteConexao.getInstance();
	}

	@Override
	public void cadastrarAluno(Aluno a) {
		String sql = "INSERT INTO aluno(aluno_id , aluno_nome ,aluno_pai ,aluno_mae ," +
				"aluno_dataNascimento ,aluno_endereco ,aluno_numero ,aluno_cidade ," +
				"aluno_uf ,aluno_dataCadastro ,aluno_horaCadastro ,aluno_teleContato1 ," +
				"aluno_teleContato2 ,aluno_teleContato3 ,aluno_teleContato4 ) values" +
				"(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
		try {
			PreparedStatement pS = conn.getConexao().prepareStatement(sql);
			
			pS.setString(1, a.getNome());
			pS.setString(2, a.getPai());
			pS.setString(3, a.getMae());
			pS.setString(4, a.getDataNascimento());
			pS.setString(5, a.getEndereco());
			pS.setString(6, a.getNumero());
			pS.setString(7, a.getCidade());
			pS.setString(8, a.getUf());
			pS.setString(9, a.getDataCadastro());
			pS.setString(10, a.getHoraCadastro());
			pS.setString(11, a.getTeleContato1());
			pS.setString(12, a.getTeleContato2());
			pS.setString(13, a.getTeleContato3());
			pS.setString(14, a.getTeleContato4());
			pS.executeUpdate();
			
		
			
		} catch (SQLException erro) {
			JOptionPane.showMessageDialog(null,"Erro = " +erro.getMessage());
		}
		
	}

	@Override
	public void alterarAluno(Aluno a) {
		String sql = "UPDATE aluno SET aluno_nome = ?,aluno_pai = ?,aluno_mae = ?," +
				"aluno_dataNascimento = ?,aluno_endereco = ?,aluno_numero = ?,aluno_cidade = ?," +
				"aluno_uf = ?,aluno_dataCadastro = ?,aluno_horaCadastro = ?," +
				"aluno_teleContato1 = ?,aluno_teleContato2 = ?,aluno_teleContato3 = ?," +
				"aluno_teleContato4 = ? where aluno_id = ?";
		
		try {
			PreparedStatement pS = conn.getConexao().prepareStatement(sql);
			
			pS.setString(1, a.getNome());
			pS.setString(2, a.getPai());
			pS.setString(3, a.getMae());
			pS.setString(4, a.getDataNascimento());
			pS.setString(5, a.getEndereco());
			pS.setString(6, a.getNumero());
			pS.setString(7, a.getCidade());
			pS.setString(8, a.getUf());
			pS.setString(9, a.getDataCadastro());
			pS.setString(10, a.getHoraCadastro());
			pS.setString(11, a.getTeleContato1());
			pS.setString(12, a.getTeleContato2());
			pS.setString(13, a.getTeleContato3());
			pS.setString(14, a.getTeleContato4());
			pS.setInt(15, a.getId());
			pS.executeUpdate();
			
		
			
		} catch (SQLException erro) {
			JOptionPane.showMessageDialog(null, "Erro = "+erro.getMessage());
		}
		
	}

	@Override
	public void removerAluno(int id) {
		String sql = "DELETE FROM aluno where aluno_id = ?";
		try {
			PreparedStatement pS = conn.getConexao().prepareStatement(sql);
			
			pS.setInt(1, id);
			pS.executeUpdate();
			
			
		} catch (SQLException erro) {
			JOptionPane.showMessageDialog(null, "Erro = "+erro.getMessage());
		}
	}

	@Override
	public List<Aluno> listarAlunos(String pesquisa) {
		String sql = null;
		if(pesquisa.equalsIgnoreCase("aluno")){
			sql = "SELECT * FROM aluno";
		}else{
			sql = "SELECT * FROM aluno where aluno_nome LIKE '%"+pesquisa+"%'";
		}
		List<Aluno> listaDeAlunos = new ArrayList<>();
		
		try {
			PreparedStatement pS = conn.getConexao().prepareStatement(sql);
			ResultSet rS = pS.executeQuery();
			
			while(rS.next()){
				Aluno a = new Aluno();
				a.setId(rS.getInt("aluno_id"));
				a.setNome(rS.getString("aluno_nome"));
				a.setPai(rS.getString("aluno_pai"));
				a.setMae(rS.getString("aluno_mae"));
				a.setDataCadastro(rS.getString("aluno_dataNascimento"));
				a.setEndereco(rS.getString("aluno_endereco"));
				a.setNumero(rS.getString("aluno_numero"));
				a.setCidade(rS.getString("aluno_cidade"));
				a.setUf(rS.getString("aluno_uf"));
				a.setDataCadastro(rS.getString("aluno_dataCadastro"));
				a.setHoraCadastro(rS.getString("aluno_horaCadastro"));
				a.setTeleContato1(rS.getString("aluno_teleContato1 "));
				a.setTeleContato2(rS.getString("aluno_teleContato2 "));
				a.setTeleContato3(rS.getString("aluno_teleContato3 "));
				a.setTeleContato4(rS.getString("aluno_teleContato4 "));
				listaDeAlunos.add(a);
			}
			
		} catch (SQLException erro) {
			JOptionPane.showMessageDialog(null, "Erro = "+erro.getMessage());
		}
		
		return listaDeAlunos;
	}

}
